package com.football.gkjo.client;

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

public class GKJoClient {

	public static void main(String[] args) throws UnknownHostException,
			IOException {

		// 서버에 접속할 소켓을 생성하자.
		Socket sock = new Socket("127.0.0.1", 10001);

		/*
		 * 서버와 접속이 되면 소켓이 생성될 것이고 이제 서버에서 보내주는 데이터를 받기 위해 InputStream을 생성해주자.
		 * 그리고 채팅방의 특성상 내가 입력하는 것보다 다른 클라이언트들이 쓰는 글들이 있다. 그런 글들을 실시간으로 받아 처리하기
		 * 위해서 쓰레드를 생성해서 지속적으로 서버에서 보내는 데이터에 대한 값들을 받자
		 */
		InputStream in = sock.getInputStream();

		GKJoClientTread gcThread = new GKJoClientTread(in);

		// 입력을 받기 위한 쓰레드를 시작
		gcThread.start();

		/*
		 * 쓰레드는 하나의 작업만을 처리하는데에 힘을 쓸 것이고 이제 이 클라이언트는 서버에서 요청하는 메시지를 입력하고
		 * 전달해줘야하므로 Writer 통해서 메시지를 전송하자. 그리고 키보드 입력을 받기 위해서 Scanner를 사용하자.
		 */

		BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(
				sock.getOutputStream()));

		// System.in (키보드 입력을) 받아서 전송해주기 위함이다.
		Scanner sc = new Scanner(System.in);

		try {
			String msg = null;
			while (!sock.isClosed()) {
				// BufferReader.readLine()과 비슷하다.
				msg = sc.nextLine();
				writer.write(msg + "\n");
				writer.flush();
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			System.out.println("접속 종료되었습니다.");
		} finally {
			try {
				sock.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block

			}
		}

	}
}
